{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**通用最佳实践回顾**\n",
    "\n",
    "- `std::unordered_map<Key, T>` 通过哈希表提供平均 `O(1)` 的插入、查找与删除；对键无序且关注常数级访问时间的场景尤为适用。\n",
    "- 适时调用 `reserve` / `rehash` 控制装载因子 (`load_factor`)，减小重新哈希开销并保持常数时间性能；在元素数量可预计时提前预留空间效果最佳。\n",
    "- 自定义哈希函数与相等谓词可用于自定义结构体键；针对字符串可考虑 `std::hash<std::string_view>` 等避免重复构造；对需要稳定哈希的跨运行场景请使用自定义哈希或 `boost`。\n",
    "- 遍历顺序不稳定且与插入顺序无关，若需稳定顺序请搭配 `std::map` 或单独维护序列。\n",
    "- 删除元素会保持其他迭代器有效，但 `find` 返回的迭代器删除后需谨慎使用；遍历中删除使用 `it = container.erase(it)`。\n",
    "- 哈希表对频繁 rehash 与内存碎片敏感；在嵌入式或内存紧张场景应衡量 `flat_map`/`flat_set` 或 `std::vector`+二分等替代。\n",
    "- 大批量构建可先 `reserve` 后插入，或使用 `emplace` 避免不必要的拷贝/移动；启用 `contains`（C++20）快速判断存在性。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "| 序号 | 工程场景                           | 文件名                            | 说明要点                                                     | 可运行示例代码          |\n",
    "| ---- | ---------------------------------- | --------------------------------- | ------------------------------------------------------------ | ----------------------- |\n",
    "| 1    | 缓存/会话/对象注册表（平均 O(1)）  | `unordered_map_session_cache.cpp` | 使用 `reserve` 预留容量；展示 `contains`、`find`、`erase` 管理会话缓存 | 示例 1：会话缓存管理    |\n",
    "| 2    | 频次统计/直方图（word count）      | `unordered_map_word_count.cpp`    | 基于 `std::istringstream` 分词；统计频次并按出现顺序输出；演示 `operator[]` 自增 | 示例 2：单词频次统计    |\n",
    "| 3    | 反向索引：ID → 位置/偏移           | `unordered_map_id_index.cpp`      | 构建 ID 到文件偏移映射；展示查找不存在时的处理以及批量查询   | 示例 3：ID 位置反向索引 |\n",
    "| 4    | 去重与映射（interning/字符串驻留） | `unordered_map_string_intern.cpp` | 将字符串驻留在唯一存储中，避免重复分配；返回稳定 `std::string_view` | 示例 4：字符串驻留池    |\n",
    "| 5    | 图/网络邻接表（哈希顶点）          | `unordered_map_graph_adj.cpp`     | 使用 `unordered_map<std::string, std::vector<std::string>>` 存储邻接表；演示 BFS 遍历 | 示例 5：哈希邻接表遍历  |\n",
    "| 6    | 连接/关联（hash-join 中间表）      | `unordered_map_hash_join.cpp`     | 模拟哈希连接：先将左表建立哈希索引，再匹配右表；演示多对多连接 | 示例 6：哈希连接中间表  |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 示例 1：会话缓存管理（unordered_map_session_cache.cpp）\n",
    "- 示例 2：单词频次统计（unordered_map_word_count.cpp）\n",
    "- 示例 3：ID 位置反向索引（unordered_map_id_index.cpp）\n",
    "- 示例 4：字符串驻留池（unordered_map_string_intern.cpp）\n",
    "- 示例 5：哈希邻接表遍历（unordered_map_graph_adj.cpp）\n",
    "- 示例 6：哈希连接中间表（unordered_map_hash_join.cpp）"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "C++17",
   "language": "C++17",
   "name": "xcpp17"
  },
  "language_info": {
   "name": "C++17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
